xend: fix block protocol mismatch on save/restore
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 14 May 2008 08:19:05 +0000 (09:19 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 14 May 2008 08:19:05 +0000 (09:19 +0100)
The protocol field of the blkif interface is correct at startup for a
guest of a different mode from dom0 (eg. 32-bit dom0, 64-bit guest).
However, this property is not persisted on save, so a later restore
(or migrate) will setup the block interface with the wrong mode.

Signed-off-by: Herbert van den Bergh <herbert.van.den.bergh@oracle.com>
Signed-off-by: Kurt Hackel <kurt.hackel@oracle.com>
tools/python/xen/xend/server/blkif.py
tools/python/xen/xm/create.py

index a94bc66b3a722958793e7e16004c0aef4b0f6e8c..4a9282eb11f68c6bdbe467db4988c86a4a2ad58a 100644 (file)
@@ -89,6 +89,10 @@ class BlkifController(DevController):
                   'device-type' : dev_type
                 }
 
+        protocol = config.get('protocol')
+        if protocol:
+            front['protocol'] = protocol
+
         return (devid, back, front)
 
     def do_access_control(self, config, uname):
@@ -162,6 +166,10 @@ class BlkifController(DevController):
         if uuid:
             config['uuid'] = uuid
 
+        proto = self.readFrontend(devid, 'protocol')
+        if proto:
+            config['protocol'] = proto
+
         return config
 
     def destroyDevice(self, devid, force):
index 6c1b5c049cbb89fd43b444d306ad4ee2d1a7add3..7487086e37ac0698b75761fe3ced84872eb6d007 100644 (file)
@@ -610,7 +610,7 @@ def configure_image(vals):
 def configure_disks(config_devs, vals):
     """Create the config for disks (virtual block devices).
     """
-    for (uname, dev, mode, backend) in vals.disk:
+    for (uname, dev, mode, backend, protocol) in vals.disk:
         if uname.startswith('tap:'):
             cls = 'tap'
         else:
@@ -622,6 +622,8 @@ def configure_disks(config_devs, vals):
                       ['mode', mode ] ]
         if backend:
             config_vbd.append(['backend', backend])
+        if protocol:
+            config_vbd.append(['protocol', protocol])
         config_devs.append(['device', config_vbd])
 
 def configure_pci(config_devs, vals):
@@ -845,7 +847,10 @@ def preprocess_disk(vals):
         n = len(d)
         if n == 3:
             d.append(None)
+            d.append(None)
         elif n == 4:
+            d.append(None)
+        elif n == 5:
             pass
         else:
             err('Invalid disk specifier: ' + v)